using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace MainGame.GamePlay
{
  /// <summary>
  /// Questo è un componente del gioco che implementa IUpdateable.
  /// </summary>
  public abstract class IntroRenderer : AnimationRenderer
  {
      private int IntroStep = 0, IntroCount = 0;

    public IntroRenderer(Game game)
      : base(game)
    {
      // TODO: creare qui eventuali componenti figlio
    }

    /// <summary>
    /// Consente al componente del gioco di eseguire l'inizializzazione necessaria prima dell'inizio
    /// dell'esecuzione. Qui è possibile eseguire query per eventuali servizi necessari e caricare contenuto.
    /// </summary>
    public override void Initialize()
    {
      // TODO: aggiungere qui il codice di inizializzazione

      base.Initialize();
    }

    /// <summary>
    /// Consente al componente del gioco di aggiornare se stesso.
    /// </summary>
    /// <param name="gameTime">Fornisce uno snapshot dei valori di temporizzazione.</param>
    public override void Update(GameTime gameTime)
    {
      // TODO: aggiungere qui il codice di aggiornamento

      base.Update(gameTime);
    }

    public override void UpdateIntro(GameTime gameTime)
    {

    }


    public override void Draw(GameTime gameTime)
    {
      base.Draw(gameTime);
    }

    public override void DrawIntro(GameTime gameTime)
    {
      //// Step 1 - Estrate prime 6-8 carte dal mazzo
      //if (IntroStep == 0)
      //{
      //  if (IntroCount < tableCardsNum)
      //  {
      //    if (AnimationState == Animation.None)
      //    {
      //      ReplaceCards(0, board_service.Players.ElementAt(0).Cards.Count()); // Logica

      //      PackCardsNum = board_service.Pack.Cards.Count();

      //      // Setta Carta da Animare
      //      cards.Add(new Card() { card = board_service.Players.ElementAt(0).Cards.Last(), coordPosition = new Vector2(packSlot.slotRectangle.X, packSlot.slotRectangle.Y), isAnimated = false, NumSlot = IntroCount });
      //      cards[IntroCount].showBack = true;
      //      cards[IntroCount].depth = 1.0f; // Carta Animata in Primo Piano
      //      if (IntroCount > 0) cards[IntroCount - 1].depth = 0.8f; // Carte Precedenti in Secondo Piano

      //      PlayAnimation("Extract", cards[IntroCount]); // Setta Animazione ultima carta Estratta           
      //      IntroCount++;
      //    }

      //    for (int i = 0; i < cards.Count(); i++) cards[i].showBack = true;

      //  }
      //  else
      //  {
      //    if (AnimationState == Animation.None) // Aspetta che finisca l'animazione
      //    {
      //      IntroStep++; // Passa a Step Successivo
      //      IntroCount = 0; // Reset Count
      //    }
      //  }

      //}

      //// Step 2 - Scopre le carte
      //if (IntroStep == 1)
      //{
      //  if (IntroCount < cards.Count())
      //  {
      //    if (AnimationState == Animation.None)
      //    {
      //      cards[IntroCount].isAnimated = true;
      //      PlayAnimation("Turn", cards[IntroCount]); // Setta Animazione Scopre carta
      //      IntroCount++;
      //    }

      //  }
      //  else
      //  {
      //    if (AnimationState == Animation.None) // Aspetta che finisca l'animazione
      //    {
      //      IntroStep++; // Passa a Step Successivo
      //    }
      //  }
      //}

      //// Step 3 - Attiva Input
      //if (IntroStep == 2)
      //{
      //  UpdateCards();
      //  renderState = RenderState.Input;
      //  if (Game.GetContext().currentConfig.tutorial && OnTutorial != null)
      //    OnTutorial();
      //}
    }
  }
}
